// 对Date的扩展，将 Date 转化为指定格式的String
// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符， 
// 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字) 
// 例子： 
// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 
// (new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18 
Date.prototype.format = function (fmt) {  
    var o = {
        "M+": this.getMonth() + 1, // 月份
        "d+": this.getDate(), // 日
        "h+": this.getHours(), // 小时
        "m+": this.getMinutes(), // 分
        "s+": this.getSeconds(), // 秒
        "q+": Math.floor((this.getMonth() + 3) / 3), // 季度
        "S": this.getMilliseconds() // 毫秒
    };
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
    if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}

function formatMillisecond(msd) {
	var fmtTime = '';
	var oneMill = 1;
	var oneSecond = 1000;
	var oneMinute = oneSecond * 60;
	var oneHour = oneMinute * 60;
	var oneDay = 24 * oneHour;
	
	var day = parseInt(msd / oneDay);
	if (day > 0) {
		if (day < 10) {
			fmtTime += '00' + day;
		} else if (day < 100) {
			fmtTime += '0' + day;
		} else {
			fmtTime += day;
		}
		msd -= day * oneDay;
	}
	var hour = parseInt(msd / oneHour);
	if (hour > 0) {
		if (fmtTime != '') {
			fmtTime += ':';
		}
		if (hour < 10) {
			fmtTime += '0' + hour;
		} else {
			fmtTime += hour;
		}
		msd -= hour * oneHour;
	}
	var minute = parseInt(msd / oneMinute);
	if (minute > 0) {
		if (fmtTime != '') {
			fmtTime += ':';
		}
		if (minute < 10) {
			fmtTime += '0' + minute;
		} else {
			fmtTime += minute;
		}
		msd -= minute * oneMinute;
	}
	var second = parseInt(msd / oneSecond);
	if (second > 0) {
		if (fmtTime != '') {
			fmtTime += ':';
		}
		if (second < 10) {
			fmtTime += '0' + second;
		} else {
			fmtTime += second;
		}
		msd -= second * oneSecond;
	}
	if (msd > 0) {
		if (fmtTime != '') {
			fmtTime += '.';
		}
		if (msd < 10) {
			fmtTime += '00' + msd;
		} else if (msd < 100) {
			fmtTime += '0' + msd;
		} else {
			fmtTime += msd;
		}
	}
	return fmtTime;
}

/**
 * 数字千分位格式化
 * 
 * @public
 * @param mixed
 *            mVal 数值
 * @param int
 *            iAccuracy 小数位精度(默认为2)
 * @return string
 */  
function formatMoney(mVal, iAccuracy){  
    var fTmp = 0.00;// 临时变量
    var iFra = 0;// 小数部分
    var iInt = 0;// 整数部分
    var aBuf = new Array(); // 输出缓存
    var bPositive = true; // 保存正负值标记(true:正数)
    /**
	 * 输出定长字符串，不够补0
	 * <li>闭包函数</li>
	 * 
	 * @param int
	 *            iVal 值
	 * @param int
	 *            iLen 输出的长度
	 */  
    function funZero(iVal, iLen){  
        var sTmp = iVal.toString();  
        var sBuf = new Array();  
        for(var i=0,iLoop=iLen-sTmp.length; i<iLoop; i++)  
            sBuf.push('0');
        sBuf.push(sTmp);
        return sBuf.join('');
    };  

    if (typeof(iAccuracy) === 'undefined')  
        iAccuracy = 2;
    bPositive = (mVal >= 0);// 取出正负号
    fTmp = (isNaN(fTmp = parseFloat(mVal))) ? 0 : Math.abs(fTmp);// 强制转换为绝对值数浮点
    // 所有内容用正数规则处理
    iInt = parseInt(fTmp); // 分离整数部分
    iFra = parseInt((fTmp - iInt) * Math.pow(10,iAccuracy) + 0.5); // 分离小数部分(四舍五入)

    do{  
        aBuf.unshift(funZero(iInt % 1000, 3));  
    }while((iInt = parseInt(iInt/1000)));  
    aBuf[0] = parseInt(aBuf[0]).toString();// 最高段区去掉前导0
    return ((bPositive)?'':'-') + aBuf.join(',') +'.'+ ((0 === iFra)?'00':funZero(iFra, iAccuracy));  
}

/**
 * 将千分位格式的数字字符串转换为浮点数
 * 
 * @public
 * @param string
 *            sVal 数值字符串
 * @return float
 */  
function unformatMoney(sVal){  
    var fTmp = parseFloat(sVal.replace(/,/g, ''));  
    return (isNaN(fTmp) ? 0 : fTmp);  
}

function toThousands(num) {
    var num = (num || 0).toString(), result = '';
    while (num.length > 3) {
        result = ',' + num.slice(-3) + result;
        num = num.slice(0, num.length - 3);
    }
    if (num) { result = num + result; }
    return result;
}